import java.util.Collection;
import java.util.HashMap;
import java.util.Map;
import java.util.Set;

public class Main {
    public static void main(String args[])
    {
        //System.out.println("hello");
        //创建散列映射，用 Map 来接受
        // 因为 所有映射类，都实现了 Map 接口
        Map<String, Employee> staff = new HashMap<>();

        //向映射集合中添加新项
        staff.put("01",new Employee("张三疯"));
        staff.put("02",new Employee("张无忌"));
        staff.put("03",new Employee("谢逊"));
        staff.put("04",new Employee("灭绝"));

        //输出,不需要经过遍历，即可直接输出所有项
        System.out.println(staff);
        //System.out.println(staff.toString());

        //删除一个项，因为是映射，
        // 每一项都是一个键值对，所以要删除就键、值一起删除
        // 按键删除
        staff.remove("04");
        System.out.println(staff);

        //更新
        staff.put("03",new Employee("成昆"));
        System.out.println(staff);

        //根据键查找值
        System.out.println(staff.get("02"));

        //遍历，使用 Map 自带的遍历方法 forEach
        // forEach 里接受的是方法，所以可以接受 lambda 表达式
        // lambda 表达式是匿名方法
        staff.forEach(
                (k,v)->
                System.out.println("键 key = "+k+", 值 value = "+v)
        );

        //另一种遍历 Map 的方法
        // 通过遍历 Map对象.entrySet()，来实现对映射这种容器的遍历

        for(Map.Entry<String,Employee> entry : staff.entrySet())
        {
            String k = entry.getKey();
            Employee v = entry.getValue();
            System.out.println("键 key = "+k+", 值 value = "+v);
        }

        System.out.println("通过 keySet 获取 Map 对象中所有的 Key，并遍历");
        // 获取 Map 对象的所有 key
        Set<String> keys = staff.keySet();
        for(String k:keys)
        {
            System.out.println("当前 key ："+k);
        }

        System.out.println("通过 values 获取 Map 对象中所有的 value，并遍历");
        // 获取 Map 对象的所有 key
        Collection<Employee> employees = staff.values();
        for(Employee v:employees)
        {
            System.out.println("当前 value ："+v);
        }
    }

}
